package cn.yueranzs.utils;

import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONObject;
import cn.yueranzs.system.pojo.Menu;

import java.util.ArrayList;
import java.util.List;

/**
 * 对菜单的封装
 * @author yueranzs
 * @date 2021/12/5 12:06
 */
public class MenuUtil {

    /**
     * 递归所有父菜单
     * @param menus 菜单集合
     * @return
     */
    public static List<Menu> getMenus(List<Menu> menus){
        List<Menu> parMenus = new ArrayList<>();
        menus.forEach(menu -> {
            //如果当前节点为父节点，parentId为0
            if (menu.getParentId() == 0) {
                parMenus.add(menu);
            }
        });
        //获取子节点
        parMenus.forEach(parMenu ->{
            getChildMenus(parMenu,menus);
        });
        //返回所有菜单
        return parMenus;
    }

    /**
     * 递归子菜单
     * @param parMenu 父菜单
     * @param menus 菜单集合
     * @return
     */
    public static Menu getChildMenus(Menu parMenu,List<Menu> menus){
        menus.forEach(menu -> {
            //如果当前菜单的父id与parMenu相同，就把该菜单放到父菜单下
            if (menu.getParentId().equals(parMenu.getId())) {
                //如果当前节点的子节点为空则初始化，如果不为空就加进去
                if(ObjectUtil.isNull(parMenu.getChildren())){
                    parMenu.setChildren(new ArrayList<Menu>());
                }
                parMenu.getChildren().add(getChildMenus(menu,menus));
            }
        });
        //返回数据
        return parMenu;
    }

}
